package model

import (
	"time"
)

// ACDStrategyType ACD分配策略类型
type ACDStrategyType string

const (
	ACDStrategyRoundRobin    ACDStrategyType = "round_robin"     // 轮循分配
	ACDStrategyLongestIdle   ACDStrategyType = "longest_idle"    // 最长空闲分配
	ACDStrategyLeastTalkTime ACDStrategyType = "least_talk_time" // 最少通话时间分配
	ACDStrategyLeastCalls    ACDStrategyType = "least_calls"     // 最少呼叫次数分配
	ACDStrategySkillBased    ACDStrategyType = "skill_based"     // 技能组分配
	ACDStrategyPriority      ACDStrategyType = "priority"        // 优先级分配
)



// QueueStatus 队列状态
type QueueStatus string

const (
	QueueStatusActive   QueueStatus = "active"   // 活跃
	QueueStatusPaused   QueueStatus = "paused"   // 暂停
	QueueStatusInactive QueueStatus = "inactive" // 非活跃
)

// QueueOverflowStrategy 队列溢出策略
type QueueOverflowStrategy string

const (
	OverflowStrategyBusy         QueueOverflowStrategy = "busy"         // 忙音
	OverflowStrategyRedirect     QueueOverflowStrategy = "redirect"     // 重定向到其他队列
	OverflowStrategyVoicemail    QueueOverflowStrategy = "voicemail"    // 语音留言
	OverflowStrategyCallback     QueueOverflowStrategy = "callback"     // 自动回拨
	OverflowStrategyAnnouncement QueueOverflowStrategy = "announcement" // 播放公告
)

// Queue 呼叫队列
type Queue struct {
	ID                            string                `json:"id"`
	Name                          string                `json:"name"`
	Description                   string                `json:"description"`
	Strategy                      ACDStrategyType       `json:"strategy"`
	Status                        QueueStatus           `json:"status"`
	MaxWaitTime                   int                   `json:"max_wait_time"`                    // 最大等待时间(秒)
	MaxQueueSize                  int                   `json:"max_queue_size"`                   // 最大队列长度
	OverflowStrategy              QueueOverflowStrategy `json:"overflow_strategy"`                // 溢出策略
	OverflowTarget                string                `json:"overflow_target"`                  // 溢出目标
	WelcomePrompt                 string                `json:"welcome_prompt"`                   // 欢迎提示音
	MusicOnHold                   string                `json:"music_on_hold"`                    // 等待音乐
	PositionAnnounceInterval      int                   `json:"position_announce_interval"`       // 位置播报间隔(秒)
	EstimatedWaitAnnounceInterval int                   `json:"estimated_wait_announce_interval"` // 预计等待时间播报间隔(秒)
	AllowCallBack                 bool                  `json:"allow_callback"`                   // 是否允许回拨
	SLAThreshold                  int                   `json:"sla_threshold"`                    // SLA阈值(秒)
	SkillIDs                      []string              `json:"skill_ids"`                        // 关联的技能ID
	CreatedAt                     time.Time             `json:"created_at"`
	UpdatedAt                     time.Time             `json:"updated_at"`
}

// Skill 技能定义
type Skill struct {
	ID          string    `json:"id"`
	Name        string    `json:"name"`
	Description string    `json:"description"`
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
}

// AgentSkill 座席技能等级
type AgentSkill struct {
	AgentID string `json:"agent_id"`
	SkillID string `json:"skill_id"`
	Level   int    `json:"level"` // 技能等级 1-10
}

// QueueMember 队列成员
type QueueMember struct {
	AgentID         string      `json:"agent_id"`
	QueueID         string      `json:"queue_id"`
	Priority        int         `json:"priority"` // 优先级 0-100
	JoinTime        time.Time   `json:"join_time"`
	LeaveTime       time.Time   `json:"leave_time,omitempty"`
	Status          AgentStatus `json:"status"`
	LastStateChange time.Time   `json:"last_state_change"`
}

// CallQueueEntry 呼叫队列条目
type CallQueueEntry struct {
	ID            string    `json:"id"`
	QueueID       string    `json:"queue_id"`
	CallUUID      string    `json:"call_uuid"`
	CallerID      string    `json:"caller_id"`
	Priority      int       `json:"priority"` // 呼叫优先级
	JoinTime      time.Time `json:"join_time"`
	Position      int       `json:"position"`             // 在队列中的位置
	WaitTime      int       `json:"wait_time"`            // 等待时间(秒)
	EstimatedWait int       `json:"estimated_wait"`       // 预计等待时间(秒)
	SkillsNeeded  []string  `json:"skills_needed"`        // 所需技能
	HandledBy     string    `json:"handled_by,omitempty"` // 处理座席ID
	AnswerTime    time.Time `json:"answer_time,omitempty"`
	EndTime       time.Time `json:"end_time,omitempty"`
	Status        string    `json:"status"` // queued, ringing, answered, abandoned
}

// CallbackRequest 回拨请求
type CallbackRequest struct {
	ID          string    `json:"id"`
	QueueID     string    `json:"queue_id"`
	CallerID    string    `json:"caller_id"`
	RequestTime time.Time `json:"request_time"`
	Status      string    `json:"status"` // pending, processing, completed, failed
	Reason      string    `json:"reason,omitempty"`
	CallTime    time.Time `json:"call_time,omitempty"`
	AgentID     string    `json:"agent_id,omitempty"`
}
